Currently, commercial cloud computing services are equipped to provide businesses with computation and data storage services, thereby allowing businesses to replace or supplement privately owned information technology (IT) assets, alleviating the burden of managing and maintaining such privately owned IT assets. While feasibility of cloud computing has grown over the last several years, there exists some technological hurdles to overcome before cloud computing becomes adopted in a widespread manner.
One problem that is desirably addressed pertains to the sharing of computing resources by multiple customers. Cloud computing platforms routinely employ virtualization to encapsulate workloads in virtual machines, which are then consolidated on cloud computing servers. Thus, a particular cloud computing server may have multiple virtual machines executing thereon that correspond to multiple different customers. Ideally, for any customer utilizing the server, the use of resources on the server by other virtual machines corresponding to other customers is transparent. Currently, cloud computing providers charge fees to customers based upon usage or reservation of resources such as, but not limited to, CPU hours, storage capacity, and network bandwidth. Service level agreements between the customers and cloud computing providers are typically based upon resource availability, such as guarantees in terms of system uptime, I/O requests, etc. Accordingly, a customer can enter into an agreement with a cloud computing services provider, wherein such agreement specifies an amount of resources that will be reserved or made available to the customer, as well as guarantees in terms of system uptime, etc.
If a customer is not utilizing all available resources of a server, however, it is in the interests of the cloud computing services provider to cause the customer to share computing resources with other customers. This can be undertaken through virtualization, such that workloads of a customer can be encapsulated in a virtual machine, and many virtual machines can be consolidated on a server. Virtualization can be useful in connection with the co-hosting of independent workloads by providing fault isolation, thereby preventing failures in an application corresponding to one customer from propagating to another application that corresponds to another customer.
Currently, various virtual machine memory management systems exist that govern how data is treated when memory is over-provisioned. These systems generally pertain to identifying when data is to be paged in from a hard disk to memory or paged out from memory to hard disk. Such systems, however, are not optimized with respect to evolving computer hardware architectures.